home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #5 / Amiga Plus CD - 2000 - No. 5.iso / Tools / Dev / lame_src / brhist.c < prev    next >
C/C++ Source or Header  |  2000-01-01  |  4KB  |  177 lines

  1. #include <string.h>
  2. #include "brhist.h"
  3. #include "util.h"
  4.  
  5. #if (defined(BRHIST) && !defined(NOTERMCAP))
  6. #include <termcap.h>
  7. #endif
  8.  
  9.  
  10. #define BRHIST_BARMAX 50
  11. long brhist_count[15];
  12. int brhist_vbrmin;
  13. int brhist_vbrmax;
  14. long brhist_max;
  15. char brhist_bps[15][5];
  16. char brhist_backcur[200];
  17. char brhist_bar[BRHIST_BARMAX+10];
  18. char brhist_spc[BRHIST_BARMAX+1];
  19.  
  20. char stderr_buff[BUFSIZ];
  21.  
  22.  
  23. #ifdef _WIN32  
  24. COORD Pos;
  25. HANDLE CH;
  26. CONSOLE_SCREEN_BUFFER_INFO CSBI;
  27. #endif
  28.  
  29. #ifdef NOTERMCAP
  30. /* tgetstr */
  31. char *
  32. tgetstr(char id[2], char **area)
  33. {
  34.       char *result;
  35.       result = NULL;
  36.       if (strncmp(id, "up", 2) == 0) {
  37.               result = "\033[A";
  38.       }
  39.       *area = result;
  40.       return result;
  41. }
  42. #endif /* NOTERMCAP */
  43.  
  44.  
  45. void brhist_init(lame_global_flags *gfp,int br_min, int br_max)
  46. {
  47.   int i;
  48.   char term_buff[1024];
  49.   char *termname;
  50.   char *tp;
  51.   char tc[10];
  52.  
  53.  
  54.   for(i = 0; i < 15; i++)
  55.     {
  56.       sprintf(brhist_bps[i], "%3d", bitrate_table[gfp->version][i]);
  57.       brhist_count[i] = 0;
  58.     }
  59.  
  60.   brhist_vbrmin = br_min;
  61.   brhist_vbrmax = br_max;
  62.  
  63.   brhist_max = 0;
  64.  
  65. #ifdef BRHIST
  66.   memset(&brhist_bar[0], '*', BRHIST_BARMAX);
  67.   brhist_bar[BRHIST_BARMAX] = '\0';
  68.   memset(&brhist_spc[0], ' ', BRHIST_BARMAX);
  69.   brhist_spc[BRHIST_BARMAX] = '\0';
  70.   brhist_backcur[0] = '\0';
  71.  
  72. #ifndef NOTERMCAP
  73.   if ((termname = getenv("TERM")) == NULL)
  74.     {
  75.       ERRORF("can't get TERM environment string.\n");
  76.       gfp->brhist_disp = 0;
  77.       return;
  78.     }
  79.  
  80.   if (tgetent(term_buff, termname) != 1)
  81.     {
  82.       ERRORF("can't find termcap entry: %s\n", termname);
  83.       gfp->brhist_disp = 0;
  84.       return;
  85.     }
  86. #endif /* !NOTERMCAP */
  87.  
  88.   tc[0] = '\0';
  89.   tp = &tc[0];
  90.   tp=tgetstr("up", &tp);
  91.   brhist_backcur[0] = '\0';
  92. #ifdef _WIN32  
  93.   CH= GetStdHandle(STD_ERROR_HANDLE);
  94. #else
  95.   for(i = br_min-1; i <= br_max; i++)
  96.     strcat(brhist_backcur, tp);
  97.   setbuf(stderr, stderr_buff);
  98. #endif
  99. #endif
  100. }
  101.  
  102. void brhist_add_count(int i)
  103. {
  104.   ++brhist_count[i];
  105.   if (brhist_count[i] > brhist_max)
  106.     brhist_max = brhist_count[i];
  107. }
  108.  
  109. void brhist_disp(long totalframes)
  110. {
  111.   int i;
  112.   long full;
  113.   int barlen;
  114.   char brpercent[10];
  115. #ifdef BRHIST
  116.   full = (brhist_max < BRHIST_BARMAX) ? BRHIST_BARMAX : brhist_max;
  117.   fputc('\n', stderr);
  118.   for(i = brhist_vbrmin; i <= brhist_vbrmax; i++)
  119.     {
  120.       barlen = (brhist_count[i]*BRHIST_BARMAX+full-1) / full;
  121.       fputs(brhist_bps[i], stderr);
  122.       sprintf(brpercent,"[%3i%%]",(int)(100*brhist_count[i]/totalframes));
  123.       fputs(brpercent, stderr);
  124.  
  125.       fputs(&brhist_bar[BRHIST_BARMAX - barlen], stderr);
  126.       fputs(&brhist_spc[barlen], stderr);
  127.       fputc('\n', stderr);
  128.     }
  129. #ifdef _WIN32  
  130.   //fflush is not needed
  131.   if(GetFileType(CH)!= FILE_TYPE_PIPE)
  132.   {
  133.     GetConsoleScreenBufferInfo(CH, &CSBI);
  134.     Pos.Y= CSBI.dwCursorPosition.Y-(brhist_vbrmax- brhist_vbrmin)- 2;
  135.     Pos.X= 0;
  136.     SetConsoleCursorPosition(CH, Pos);
  137.   }
  138. #else
  139.   fputs(brhist_backcur, stderr);
  140.   fflush(stderr);
  141. #endif  
  142. #endif
  143. }
  144.  
  145. void brhist_disp_total(lame_global_flags *gfp)
  146. {
  147.   int i;
  148.   FLOAT ave;
  149.   /*  lame_internal_flags *gfc=gfp->internal_flags;*/
  150.  
  151. #ifdef BRHIST
  152.   for(i = brhist_vbrmin; i <= brhist_vbrmax; i++)
  153.     fputc('\n', stderr);
  154. #else
  155.   fprintf(stderr, "\n----- bitrate statistics -----\n");
  156.   fprintf(stderr, " [kbps]      frames\n");
  157.   for(i = brhist_vbrmin; i <= brhist_vbrmax; i++)
  158.     {
  159.       fprintf(stderr, "   %3d  %8ld (%.1f%%)\n",
  160.           bitrate_table[gfp->version][i],
  161.           brhist_count[i],
  162.           (FLOAT)brhist_count[i] / gfp->totalframes * 100.0);
  163.     }
  164. #endif
  165.   ave=0;
  166.   for(i = brhist_vbrmin; i <= brhist_vbrmax; i++)
  167.     ave += bitrate_table[gfp->version][i]*
  168.       (FLOAT)brhist_count[i] / gfp->totalframes;
  169.   fprintf(stderr, "\naverage: %2.0f kbs\n",ave);
  170.  
  171.   fflush(stderr);
  172. }
  173.  
  174.  
  175.  
  176.  
  177.